﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DMA.SGDB.DAL;
using System.Data;
using DMA.SGDB.Util;

namespace DMA.SGDB.BLL
{
    public class FornecedorPJBLL
    {
        FornecedorPJDAL fornecedorPJDal;

        public void Insert(FORNECEDOR_PJ fornecedor)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                fornecedorPJDal.Insert(fornecedor);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String Update(FORNECEDOR_PJ fornecedor)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                fornecedorPJDal.Update(fornecedor);

                return "Registro atualizado com sucesso!";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String Delete(int idfornecedor)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                fornecedorPJDal.Delete(idfornecedor);

                return "Registro excluído com sucesso!";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable GetAll()
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                IList<FORNECEDOR_PJ> allRecords = fornecedorPJDal.GetAll();
                return CreateTable(allRecords, null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public FORNECEDOR_PJ LoadById(int idfornecedorS_PJ)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                return fornecedorPJDal.LoadById(idfornecedorS_PJ);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String GetDuplicateRecord(FORNECEDOR_PJ fornecedor)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                IList<FORNECEDOR_PJ> duplicateRecord = fornecedorPJDal.GetDuplicateRecord(fornecedor);

                if (duplicateRecord == null || duplicateRecord.Count == 0)
                    return null;
                else
                    return "Fornecedor já cadastrado com o nome " + duplicateRecord.First().NOME_FOR + ".";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<String> ValidateFields(FORNECEDOR_PJ fornecedorPJ)
        {
            try
            {
                List<String> emptyFields = new List<String>();

                if (string.IsNullOrEmpty(fornecedorPJ.RAZAO_FOR))
                    emptyFields.Add("<b>'Razão Social'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(fornecedorPJ.NOME_FOR))
                    emptyFields.Add("<b>'Nome Fantasia'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(fornecedorPJ.CNPJ_FOR))
                    emptyFields.Add("<b>'CNPJ'</b>: Campo obrigatório. ");
                if (fornecedorPJ.DTA_NSC_FOR.Year.ToString() == "1500")
                    emptyFields.Add("<b>'Data de Fundação'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(fornecedorPJ.TEL_FOR))
                    emptyFields.Add("<b>'Telefone'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(fornecedorPJ.RES_FOR))
                    emptyFields.Add("<b>'Responsável'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(fornecedorPJ.END_FOR))
                    emptyFields.Add("<b>'Endereço'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(fornecedorPJ.CEP_FOR))
                    emptyFields.Add("<b>'CEP'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(fornecedorPJ.CID_FOR))
                    emptyFields.Add("<b>'Cidade'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(fornecedorPJ.CEP_FOR))
                    emptyFields.Add("<b>'E-mail'</b>: Campo obrigatório.  ");

                if (emptyFields.Count == 0 || emptyFields == null)
                    return null;
                else
                    return emptyFields;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool ValidateCNPJ(String cnpj)
        {
            return new ValidacaoCNPJ().ValidarCNPJ(cnpj);
        }

        public IList<FORNECEDOR_PJ> GetDuplicateDescription(FORNECEDOR_PJ fornecedor)
        {
            try
            {
                fornecedorPJDal = new FornecedorPJDAL();
                IList<FORNECEDOR_PJ> duplicateName = fornecedorPJDal.GetDuplicateDescription(fornecedor);
                return duplicateName;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private DataTable CreateColumns(DataTable table)
        {
            try
            {
                table.Columns.Add("ID");
                table.Columns.Add("Razão Social");
                table.Columns.Add("Nome Fantasia");
                table.Columns.Add("CNPJ");
                table.Columns.Add("Data de Fundação");
                table.Columns.Add("Telefone");
                table.Columns.Add("Responsável");
                table.Columns.Add("Endereço");
                table.Columns.Add("CEP");
                table.Columns.Add("Cidade");
                table.Columns.Add("E-mail");

                return table;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable CreateTable(IList<FORNECEDOR_PJ> listOfRecords, String key)
        {
            try
            {
                DataTable tableRecords;
                DataRow newRow;

                tableRecords = new DataTable();
                CreateColumns(tableRecords);

                foreach (FORNECEDOR_PJ fornecedor in listOfRecords.Reverse())
                {
                    newRow = tableRecords.NewRow();

                    newRow[0] = fornecedor.COD_FOR;
                    newRow[1] = fornecedor.RAZAO_FOR;
                    newRow[2] = fornecedor.NOME_FOR;
                    newRow[3] = fornecedor.CNPJ_FOR;
                    newRow[4] = fornecedor.DTA_NSC_FOR.ToString("dd/MM/yyyy");
                    newRow[5] = fornecedor.TEL_FOR;
                    newRow[6] = fornecedor.RES_FOR;
                    newRow[7] = fornecedor.END_FOR;
                    newRow[8] = fornecedor.CEP_FOR;
                    newRow[9] = fornecedor.CID_FOR;
                    newRow[10] = fornecedor.EMAIL_FOR;

                    tableRecords.Rows.Add(newRow);
                }

                return tableRecords;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string Encrypt(String message, String key)
        {
            //return Util.Encryption.Encryptstring(message, key);
            return null;
        }

        public string Decrypt(String message, String key)
        {
            //return Util.Encryption.Decryptstring(message, key);
            return null;
        }
    }
}
